💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    미니프로젝트10 | ✅저자: 이유정(박사)

    프로젝트 코드명: RecursiveDataSum 프로젝트 유형: 재귀 기반 중첩 데이터 분석기

    🖥️ 프로젝트 개요

    중첩 리스트 안에 섞여 있는 숫자(int, float), 문자열(str), 불린(bool)의 개수와,
    숫자의 합계, 문자열의 총 길이, 불린 값의 True 개수를 각각 계산하는 재귀 분석기를 만듭니다.
    

    ◽ 이 프로젝트를 통해 자연스럽게 적용되는 내용

    • 재귀함수로 리스트 구조 탐색
    • 조기 리턴입력값 검사
    • 리스트 평탄화 X → 구조 유지하며 정보만 추출
    • isinstance() 활용한 타입 분기

    📄 기능 요구사항 (Functional Requirements)

    • 숫자 (int, float) 개수 및 합계 출력
    • 문자열 개수 및 총 길이 출력
    • 불린 타입 중 True 개수 출력
    • 리스트 구조가 아니거나 빈 리스트인 경우 예외 처리

    📄 비기능 요구사항 (Non-Functional Requirements)

    • 함수 분리: 자료 유형별 로직 분리
    • 재귀 구조 유지
    • 입력값이 리스트가 아닐 경우 에러 메시지 출력

    ✅ 출력 포맷 구성:

    총 숫자 개수: 4
    숫자 합계: 35.5
    총 문자열 개수: 3
    총 문자열 길이: 10
    True 개수: 2
    

    ✅ 정답 코드:

    def analyze(data):
        if not isinstance(data, list):
            print("리스트 형태의 데이터만 분석할 수 있습니다.")
            return
    
        result = {'num_count': 0, 'num_sum': 0, 'str_count': 0, 'str_len': 0, 'true_count': 0}
    
        for item in data:
            if isinstance(item, list):
                sub = analyze(item)
                if sub:
                    for key in result:
                        result[key] += sub[key]
            elif isinstance(item, (int, float)):
                result['num_count'] += 1
                result['num_sum'] += item
            elif isinstance(item, str):
                result['str_count'] += 1
                result['str_len'] += len(item)
            elif isinstance(item, bool):
                result['true_count'] += int(item)
    
        return result
    
    # 테스트 예시
    nested = [1, "hello", [3.5, [True, "ok"]], [False, 10, "bye", [7, True]]]
    res = analyze(nested)
    
    if res:
        print("총 숫자 개수:", res['num_count'])
        print("숫자 합계:", res['num_sum'])
        print("총 문자열 개수:", res['str_count'])
        print("총 문자열 길이:", res['str_len'])
        print("True 개수:", res['true_count'])
    

    🔍 코드 해설:

    • 다단계 리스트 안의 타입별 데이터를 분류·집계하는 실전 기초
    • 재귀적으로 하위 리스트를 탐색하고 결과를 누적
    • 실무에서 데이터 통계, 필터링, 로깅 분석 등에 직접 응용 가능
    TOP
    preload preload